// app.js
import {
  wxLogin,
  codeToToken,
  checkToken,
  checkSession
} from "./service/api_login"

const TOKEN = "token";
App({
  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 获取当前设备信息
    const info = wx.getSystemInfoSync();
    this.globalData.statusBarHeight = info.statusBarHeight
    this.globalData.screenHeight = info.screenHeight

    // 验证token seesion_key存在 或过期  是否重新登录
    // login 也只是拿到了用户的唯一表示 并没有用户的任何有效信息 比如 用户微信昵称、头像
    this.LoginAgain()

    // 通过一个事件 来触发  wx.getUserProfile 来获取用户的信息
  },

  // 全局数据
  //  getApp().globalData.name； 拿到数据；拿的那一刻是最新的数据；但是不是响应式的
  //  不能在 这些全局数据发生变化时；重新渲染
  globalData: {
    userInfo: null,
    screenHeight: 0,
    statusBarHeight: 0,
    navigateBarHeight: 44, // 导航栏高度常量
    token: "" // token
  },

  async login() {
    // 1 获取code
    const loginResult = await wxLogin().catch(err => console.log(err));
    const code = loginResult.code;

    // 2 发送code给后端
    const tokenResult = await codeToToken({
      code
    }).catch(err => console.log(err))
    const token = tokenResult.token;

    // 3 将token保存到本地
    this.globalData.token = token;
    wx.setStorageSync(TOKEN, token);
  },

  async LoginAgain() {
    // 先判断token是否存在
    const token = wx.getStorageSync(TOKEN);
    const checkTokenResult = await checkToken({
      token
    }).catch(err => console.log(err));
    const checkSessionResult = await checkSession().catch(err => console.log(err))

    if (!token || checkTokenResult.errorCode || !checkSessionResult) {
      this.login(); // 微信小程序登录
    };
  }
})



/**
 * 小程序的扩展
 *  1 默认插槽的使用(官方不支持)
 *  2 多个页面之间共享数据(官方提供的共享是在 app.js 里面共享数据)
 *  
 */

/**
 * 小程序的登录
 *  1 需要先 使用wx.login 在suceess回调函数里面 拿到code
 *  2 通过后端的服务器接口 将这个code 发送给我吗自己的后端服务器
 *  3 后端服务器 拿到 code 和 appid appserect(这两个东西在小程序控制台 开发管理里面可以看到) 向微信服务器发送请求 拿到当前用户的openid 
 *     session_key
 *  4 我们自己的服务器拿到openid 将openid存到数据库中
 *  5 再向客户端返回一个 token;
 *  6 客户端拿到 token 之后 用 wx.setStorageSync(TOKEN, token); 存贮
 *  7 在之后的每次请求中都加上 在请求头中都加上token; 标识是否是当前用户
 *  8 下次再打开小程序 先从storge中取出 token;再判断他是否过期；过期了需要重新登录；重新请求token;再保存
 */


/**
 * openid 和 unionid
 * 同一用户 在 同一个微信共众平台下(一家公司)的 不同的 小程序 或公众号 的openid是不同的
 * 但是 如果想要在小程序中知道 用户在公众号中收藏了什么； 这时候就需要UnionID;
 * 
 * UnionID 是用户 在 一个 微信共众平台 的唯一标识 ；也就是说对于 一个微信共众平台下的的不同小程序 或公众号来说都是相同的
 * 
 * 而且pc端 或移动端 想要知道用户在 小程序中收藏了什么；
 * 
 * 这时候都会采用第三方登录；让你使用微信 或 qq 微博等进行登录；微信
 * 
 * 为了在 移动端 或pc端都知道 在小程序里面的收藏
 * 
 * 在小程序里面 将uninoid 和 手机号进行绑定；    在 移动端 或pc端 进行 第三方登录之后； 再进行手机号的绑定
 * 
 * 在小程序里面 想要拿到手机号；必须是公司开发者；个人开发者是拿不到的；
 */

/**
 * 独立分包
 * 
 */